﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CRM_WF.GestionEleveservice;
using CRM_WF.GestionAgenceService;
using CRM_WF.GestionCentreFormationService;
using CRM_WF.GestionCircuitService;
using CRM_WF.GestionEmployeService;
using CRM_WF.GestionFormateurService;
using CRM_WF.GestionFormationService;
using CRM_WF.GestionNotesService;
using CRM_WF.GestionPermisService;
using CRM_WF.GestionSessionConduiteService;
using CRM_WF.GestionSessionFormationService;
using CRM_WF.GestionThemeService;
using CRM_WF.GestionTypeSessionService;
using CRM_WF.GestionVehiculeService;
using System.ServiceModel;


namespace CRM_WF
{
    class WebServices
    {
        GestionEleveServiceClient gestionEleve;
        GestionAgenceServiceClient gestionAgence;
        GestionCentreFormationServiceClient  gestionCentreFormation;
        GestionCircuitServiceClient gestionCircuit;
        GestionEmployeServiceClient gestionEmploye;
        GestionFormateurServiceClient gestionFormateur;
        GestionFormationServiceClient gestionFormation;
        GestionNotesServiceClient gestionNote;
        GestionPermisServiceClient gestionPermis;
        GestionSessionConduiteServiceClient gestionSessionConduite;
        GestionSessionFormationServiceClient gestionSessionFormation;
        GestionThemeServiceClient gestionTheme;
        GestionTypeSessionServiceClient gestionTypeSession;
        GestionVehiculeServiceClient gestionVehicule;
        
        public WebServices()
        {
            try
            {
                gestionEleve = new GestionEleveServiceClient("WSHttpBinding_IGestionEleveService");
                gestionAgence = new GestionAgenceServiceClient("WSHttpBinding_IGestionAgenceService");
                gestionCentreFormation = new GestionCentreFormationServiceClient("WSHttpBinding_IGestionCentreFormationService");
                gestionCircuit = new GestionCircuitServiceClient("WSHttpBinding_IGestionCircuitService");
                gestionEmploye = new GestionEmployeServiceClient("WSHttpBinding_IGestionEmployeService");
                gestionFormateur = new GestionFormateurServiceClient("WSHttpBinding_IGestionFormateurService");
                gestionFormation = new GestionFormationServiceClient("WSHttpBinding_IGestionFormationService");
                gestionNote = new GestionNotesServiceClient("WSHttpBinding_IGestionNotesService");
                gestionPermis = new GestionPermisServiceClient("WSHttpBinding_IGestionPermisService");
                gestionSessionConduite = new GestionSessionConduiteServiceClient("WSHttpBinding_IGestionSessionConduiteService");
                gestionSessionFormation = new GestionSessionFormationServiceClient("WSHttpBinding_IGestionSessionFormationService");
                gestionTheme = new GestionThemeServiceClient("WSHttpBinding_IGestionThemeService");
                gestionTypeSession = new GestionTypeSessionServiceClient("WSHttpBinding_IGestionTypeSessionService");
                gestionVehicule = new GestionVehiculeServiceClient("WSHttpBinding_IGestionVehiculeService");
            }
            catch(Exception e)
            {
                throw new Exception("Erreur création web service. Vérifiez que les services ASP.net soit lancé. " + e.Message);
            }
        }

        public List<string> RecupererToutLesEleves()
        {
            List<string> retourListEleves = new List<string>();
            foreach (Eleve eleve in gestionEleve.GetAllEleves())
            {
                retourListEleves.Add(eleve.Nom + " " + eleve.Prenom);
            }
            return retourListEleves;
        }

        public List<string> RecupererToutLesVehicules()
        {
            List<string> retourListVehicule = new List<string>();
            foreach (Vehicule vehicule in gestionVehicule.GetAllVehicules())
            {
                retourListVehicule.Add(vehicule.Type + " " + vehicule.Marque +" "+vehicule.Modele +" "+vehicule.Immatriculation +" "+ vehicule.Annee);
            }
            return retourListVehicule;
        }

        public List<string> ListeEleveDeLaJournee(DateTime date)
        {
            List<string> retourListEleves = new List<string>();
            foreach (SessionConduite sessionDeConduite in gestionSessionConduite.GetSessionConduiteByDay(date))
            {
                Eleve eleve = gestionEleve.GetEleveById(sessionDeConduite.EleveID); // A MODIF !
               retourListEleves.Add(eleve.Nom + " " + eleve.Prenom);
            }
            return retourListEleves;
        }

        public void ajoutSessionFormation(/*da*/)
        {
            SessionFormation session = new SessionFormation();
            //session.DateDebut

        }

        public List<string> recupererTypesPermis()
        {

            List<string> listePermis = new List<string>();
            foreach (Permis permis in gestionPermis.GetAllPermis())
            {
                listePermis.Add(permis.Description);
            }
            return listePermis;
        }
         
        public List<string> bob()
        {
            string toto = "";
            if (toto.GetType() == typeof(string))
            {
                return new List<string>();
            }
             return new List<string>();
        }

        public void NoterEleve(int note, int eleveID)
        {
            eleveID = 1;
            Notes addNote = new Notes()
            {
                Note=note ,
                EleveID = eleveID,

            };
            gestionNote.CreateNote(addNote);
        }

        public List<string> RecupererListeFormationsFormateur()
        {
            List<string> Retourformation = new List<string>();
            foreach (SessionFormation session in gestionSessionFormation.GetAllSessionFormations ())
            {
                Retourformation.Add(session.TypeSessionID + " "+session.DateDebut +" "+ gestionFormateur.GetFormateurById (session.FormateurID).Nom  +" "+ gestionFormateur.GetFormateurById (session.FormateurID).Prenom +" "+session.DateFin + ", Formateur"
                );
            }

            return Retourformation;
        }

        public List<string> RecupererToutesLesSessionsFormation(DateTime date)
        {
            List<string> listSession = new List<string>();
            listSession .Add("ID       Nombre d'heures       Date debut      Date Fin     Nom Formateur   Prenom Formateur   Nom Eleve  Prenom Eleve    ");
            foreach (SessionFormation session in gestionSessionFormation.GetAllSessionFormations())  // a modif pour avoir la recherche par date
            {
                listSession.Add(session.ID + "     " +session.NombreDHeures + "     " + session.DateDebut + "     " +
                    session.DateFin+ "     "+gestionFormateur.GetFormateurById(session.FormateurID).Nom + " " + 
                    gestionFormateur.GetFormateurById(session.FormateurID).Prenom +"     "+
                    gestionEleve.GetEleveById(session.EleveID).Nom +" "+gestionEleve.GetEleveById(session.EleveID).Prenom );
                    //+ gestionTypeSession.GetTypeSessionById(session.TypeSessionID).(gesttion
            }

            return listSession ;
        }

        public List<string> RecupererToutesLesSessionsConduite(DateTime date)
        {
            List<string> listConduite = new List<string>();
            listConduite.Add("ID       Nombre d'heures       Date debut      Date Fin     Nom Formateur   Prenom Formateur   Nom Eleve  Prenom Eleve    ");
            foreach (SessionConduite session in gestionSessionConduite.GetAllSessionConduites())  // a modif pour avoir la recherche par date
            {
                listConduite.Add(session.ID + "     " + session.NombreDHeures + "     " + session.DateDebut + "     " +
                    session.DateFin + "     " + gestionFormateur.GetFormateurById(session.FormateurID).Nom + " " +
                    gestionFormateur.GetFormateurById(session.FormateurID).Prenom + "     " +
                    gestionEleve.GetEleveById(session.EleveID).Nom + " " + gestionEleve.GetEleveById(session.EleveID).Prenom);
                //+ gestionTypeSession.GetTypeSessionById(session.TypeSessionID).(gesttion
            }

            return listConduite;
        }


        public void AjouterEleve(string nom, string prenom, string login, string password, string adresse, string ville, int codePostal, string mail, int telephone, int formateurID, bool titulaireCode)
        {
            Eleve eleve = new Eleve
            {
                Nom = nom,
                Prenom = prenom,
                Login = login,
                MotDePasse = password,
                Adresse = adresse,
                Ville = ville,
                CodePostal = codePostal,
                Email = mail,
                Telephone = telephone,
                FormateurID = formateurID,
                TitulaireCode = titulaireCode
            };

            gestionEleve.CreateEleve(eleve);
        }

        public void UpdaterEleve(Eleve eleve)
        {
            gestionEleve.UpdateEleve(eleve);
        }



        public int VerifierUser(string login, string password)
        {
         /*   Formateur formateur = new Formateur();
            Employe employe = new Employe();
            try
            {
                 formateur = gestionFormateur.GetFormateurByLogin(login);
                 employe = gestionEmploye.GetEmployeByLogin(login);
            }
            catch
            {
            }
            if (formateur != null)
            {
                if (formateur.MotDePasse == password) return 1;
                else return 0;
            }

            else if (employe != null)
            {
                if (employe.MotDePasse == password)
                    if (employe.Poste == "Administration") return 2;
                    else return 3;

                else return 0;
            }

            else if (login == "admin" && password == "admin")
            {
                return 4;
            }
            */
            return 0;
        }



        public Eleve RecupererEleveParId(int id)
        {
            Eleve eleve = new Eleve();
            eleve = gestionEleve.GetEleveById(id);
            return eleve;
        }

        public List<string> RecupererEleveParPrenomEtNom(string prenom, string nom)
        {
            List<Eleve> ListeEleve = gestionEleve.GetEleveByPrenomEtNom(prenom, nom);

            List<string> RetourEleve = new List<string>();

            RetourEleve.Add(ListeEleve[0].Nom);
            RetourEleve.Add(ListeEleve[0].Prenom);
            RetourEleve.Add(ListeEleve[0].Adresse);
            RetourEleve.Add(ListeEleve[0].CodePostal.ToString());
            RetourEleve.Add(ListeEleve[0].Ville);
            RetourEleve.Add(ListeEleve[0].Email);
            RetourEleve.Add(ListeEleve[0].Telephone.ToString());
            RetourEleve.Add(ListeEleve[0].TitulaireCode.ToString());
            RetourEleve.Add(ListeEleve[0].FormateurID.ToString());
            RetourEleve.Add(ListeEleve[0].Login);
            RetourEleve.Add(ListeEleve[0].MotDePasse);
            RetourEleve.Add(ListeEleve[0].ID.ToString());

            return RetourEleve;

        }

        public List<string> RecupererEleveParPrenom(string prenom)
        {
            List<Eleve> ListeEleve = gestionEleve.GetEleveByPrenom(prenom);

            List<string> RetourEleve = new List<string>();

            try
            {
                RetourEleve.Add(ListeEleve[0].Nom);
                RetourEleve.Add(ListeEleve[0].Prenom);
                RetourEleve.Add(ListeEleve[0].Adresse);
                RetourEleve.Add(ListeEleve[0].CodePostal.ToString());
                RetourEleve.Add(ListeEleve[0].Ville);
                RetourEleve.Add(ListeEleve[0].Email);
                RetourEleve.Add(ListeEleve[0].Telephone.ToString());
                RetourEleve.Add(ListeEleve[0].TitulaireCode.ToString());
                RetourEleve.Add(ListeEleve[0].FormateurID.ToString());
                RetourEleve.Add(ListeEleve[0].Login);
                RetourEleve.Add(ListeEleve[0].MotDePasse);
                RetourEleve.Add(ListeEleve[0].ID.ToString());


                return RetourEleve;
            }

            catch (Exception e)
            {
                throw new Exception("retour vide" + e.Message);
            }

        }

        public List<string> RecupererEleveParNom(string nom)
        {
            List<Eleve> ListeEleve = gestionEleve.GetEleveByNom(nom);

            List<string> RetourEleve = new List<string>();

            try
            {
                RetourEleve.Add(ListeEleve[0].Nom);
                RetourEleve.Add(ListeEleve[0].Prenom);
                RetourEleve.Add(ListeEleve[0].Adresse);
                RetourEleve.Add(ListeEleve[0].CodePostal.ToString());
                RetourEleve.Add(ListeEleve[0].Ville);
                RetourEleve.Add(ListeEleve[0].Email);
                RetourEleve.Add(ListeEleve[0].Telephone.ToString());
                RetourEleve.Add(ListeEleve[0].TitulaireCode.ToString());
                RetourEleve.Add(ListeEleve[0].FormateurID.ToString());
                RetourEleve.Add(ListeEleve[0].Login);
                RetourEleve.Add(ListeEleve[0].MotDePasse);

                return RetourEleve;
            }

            catch (Exception e)
            {
                throw new Exception("retour vide" + e.Message);
            }

        }

        public void AjouterSession(string dateDebut,string datefin,string Nombredheure,string typeSessionID,string FormateurId,string EleveID,string vehiculeId,string type)
        {
            switch(type)
            {
                case "Formation":
                    SessionFormation sessionfo = new SessionFormation()
                    {
                        DateDebut = DateTime.Parse(dateDebut),
                        DateFin=DateTime.Parse(datefin),
                        NombreDHeures=Int32.Parse ( Nombredheure),
                        TypeSessionID = Int32.Parse( typeSessionID ),
                        FormateurID= Int32.Parse(FormateurId),
                        EleveID=Int32.Parse(EleveID),
                    };
                    
                    gestionSessionFormation.CreateSessionFormation(sessionfo);
                    break;
                case "Conduite":
                    SessionConduite sessionconduite = new SessionConduite()
                    {
                        DateDebut = DateTime.Parse(dateDebut),
                        DateFin=DateTime.Parse(datefin),
                        NombreDHeures=Int32.Parse ( Nombredheure),
                        TypeSessionID = Int32.Parse( typeSessionID ),
                        FormateurID= Int32.Parse(FormateurId),
                        EleveID=Int32.Parse(EleveID),
                    };

                    gestionSessionConduite.CreateSessionConduite(sessionconduite);
                    break;
            }
        }

    }
}
